package org.basic.algorithm.simple;

/**
 * 整数反转
 * <p>
 * 给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
 * 如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ，就返回 0。
 * <p>
 * 示例 1：
 * 输入：x = 123
 * 输出：321
 * <p>
 * 示例 2：
 * 输入：x = -123
 * 输出：-321
 * <p>
 * 示例 3：
 * 输入：x = 120
 * 输出：21
 * <p>
 * 提示：
 * -2^31 <= x <= 2^31 - 1
 *
 * @author LiKun
 * @date 2021/10/8 14:39
 */
public class ReverseInteger {
    public static void main(String[] args) {
        System.out.println(getReverse(153));
    }

    /**
     * 运行速度较快，内存占用较低
     * 时间：1 ms；内存：35.4-35.6 MB
     *
     * @param x 给定数字
     *
     * @return 反转后数字
     */
    public static int getReverse(int x) {
        double result = 0;

        if (x != 0) {
            while (x % 10 == 0) {
                x = x / 10;
            }

            while (x != 0) {
                result = result * 10 + x % 10;
                x = x / 10;
            }
        }

        return Integer.MIN_VALUE < result && result < Integer.MAX_VALUE ? (int) result : 0;
    }
}
